\documentclass[11pt,fleqn]{article}

\usepackage{color}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes}

\definecolor{brown}{rgb}{0.7,0.2,0}
\definecolor{darkgreen}{rgb}{0,0.6,0.1}
\definecolor{darkgrey}{rgb}{0.4,0.4,0.4}
\definecolor{lightgrey}{rgb}{0.95,0.95,0.95}


\usepackage[spanish]{babel}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage[urlcolor=blue]{hyperref}
%\usepackage[colorlinks=true,urlcolor=blue]{hyperref}
\usepackage{makeidx}
\usepackage{graphicx}

\lstset{
   language=C,
   gobble=2,
   frame=single,
   framerule=1pt,
   showstringspaces=false,
   basicstyle=\footnotesize\ttfamily,
   keywordstyle=\textbf,
   backgroundcolor=\color{lightgrey},
   literate={á}{{\'a}}1
            {é}{{\'e}}1
            {í}{{\'i}}1
            {ó}{{\'o}}1
            {ú}{{\'u}}1
            {ñ}{{\~n}}1
}

\begin{document}

\title{CI4835 - Redes de Computadoras \\ Informe del Proyecto 2}

\author{Alex Tough (07-41604)\\
Carlos Colmenares (06-39380)\\
}

\date{Febrero 27, 2011}

\maketitle

\pagebreak

\tableofcontents
\listoffigures

\pagebreak

\section{Descripción del Problema}

Se ha solicitado que se realice un sistema de repositorios de archivos.
Los componentes de este sistema son: el programa drep, que recibe, almacena 
y entrega archivos que sean subidos o solicitados por otros programas, el 
programa dcli, que envian o solicitan archivos a los programas drep del sistema,
en funcion de las peticiones del usuario. Pueden exisitir varias instancias dcli y drep, pero xiste un \'unico programa dmon, que 
ser\'a el encargado de llevar una serie de datos de las operaciones que los 
programas dcli realizan en todos los programas drep del sistema.

\section{Diseño e Implementación}

El diagrama de estados que se muestra en la Figura \ref{diag:estado}
describe los estados posibles del servidor drep a lo largo
de su operación, así como también los detalles del protocolo 
que fueron implementados a éste. A continuación se
realizará una descripción de cada estado y sus transiciones:

\begin{figure}[htb]
\begin{center}
\includegraphics[scale=0.30]{StateDiagramProy2.jpeg}
\end{center}
\caption{Diagrama de Estados}
\label{diag:estado}
\end{figure}


\begin{enumerate}
    \item   Al iniciar su ejecución, el servidor abre un ``socket'' por
            el puerto que se le fue asignado y espera por alguna conexión
    \item   Al recibir una conexión el servidor crea un \textbf{hilo hijo},
            el cual se encargará de atender al cliente. Posteriormente, el programa servidor 
	    volverá a esperar nuevas conexiones. Este comportamiento
            implica que el servidor  es \textbf{concurrente} y puede atender
            varias conexiones al mismo tiempo.
    \item   Una vez creado, el hilo hijo recibe la información enviada por
            el programa cliente, la cual se espera que se comunique usando mensajes que tiene
	    la forma siguiente:\\
	    \begin{itemize}
		\item Comandos $rdir, tuser, nrep, nops$: Se env\'ia un mensaje de una sola l\'inea que contiene @$\{X\}$, $\{X\} \in \{RDIR, TUSER, NREP, NOPS\}$
		\item Comando $sube <nomb\_archivo>$: Se envi\'a el mensaje siguiente:\\\\
					    @SUBE\\
					    Nombre del archivo\\
					    Tama\~no del archivo en bytes.\\
					    Contenido del archivo.\\
		\item Comando $baja <nomb\_archivo>$: Se env\'a el mensaje siguiente:\\\\
					    @BAJA\\
					    Nombre del archivo\\
	    \end{itemize}
	    
    \item   Dependiendo de la solicitud recibida, el servidor envía
            una respuesta al cliente:
            \begin{description}
                \item[Petición ''rdir'',``tuser'',''nrep'', o ''nops''] \hfill \\
                        Si no ha ocurrido ning\'un error, entonces se env\'ia un
			mensaje que tiene la forma siguiente:\\\\
			@OK\\
			Entero indicando cantidad de l\'ineas que tiene la respuesta.\\
			Contenido de la respuesta.\\
		\item[Petición ''subir <nomb archivo>''] \hfill \\
                        Si no ha ocurrido ning\'un error, entonces se env\'ia un
			mensaje que contiene una sola l\'inea que dice @OK.\\
                \item[Petición ''baja <nomb archivo>''] \hfill \\
			Si no ha ocurrido ning\'un error, entonces se env\'ia un mensaje de la 
			forma siguiente:\\\\
			@OK\\
			Entero indicando tama\~no de la respuesta(en bytes).\\
			Contenido de la respuesta.\\
                \item[Cualquier peticion que haya tenido un error] \hfill \\
			Si ha ocurrido algun error en el servidor en el procesamiento de la
			petici\'on, entonces se env\'ia un mensaje que tiene la forma siguiente:\\\\
			@ERROR\_INESPERADO\\\\
            \end{description} 
\end{enumerate}

\begin{figure}[htb]
\begin{center}
\includegraphics[scale=0.35]{SequenceDiagram1Proy2.jpeg}
\end{center}
\caption[Diagrama de Secuencias - Bajar archivo]{Diagrama de Secuencias de una conexión entre \\
el servidor y un cliente que solicita bajar un archivo dado.}
\label{diag:seq1}
\end{figure}

\pagebreak

\begin{figure}[htb]
\begin{center}
\includegraphics[scale=0.30]{SequenceDiagram2Proy2.jpeg}
\end{center}
\caption[Diagrama de Secuencias - Consultar usuarios]{Diagrama de Secuencias de una conexión entre \\
el servidor y un cliente que solicita una informaci\'on sobre todos los usuarios del sistema.}
\label{diag:seq2}
\end{figure}



%\section{sección de ejemplo}
%
%Aquí viene el texto de la pregunta, o el desarrollo del tema que
%se haya solicitado.
%
%Debe dejar una línea en blanco para indicar el final de un párrafo.
%
%Un segmento de código en Haskell debe escribirse como se muestra. Note que
%las líneas deben comenzar con ``> '' para que sean tomadas en cuenta
%por \texttt{ghci}.
%
%\begin{lstlisting}
%> {- Un comentario áéíóúñ -}
%> suma = foldr (+) 0      -- Suma usando fold
%> producto = foldr (*) 1
%\end{lstlisting}
%
%Para hacer alguna referencia se usa \cite{RWH}
%
%El resto del documento es \LaTeX \ldots
%
%\bibliographystyle{alpha}
%
%\begin{thebibliography}{HMGW96}
%
%\bibitem[RWH]{RWH}
%Bryan O'Sullivan, John Goerzen y Don Stewart
%
%\newblock \emph{Real World Haskell}
%
%\newblock O'Reilly, 2009
%
%\newblock \url{http://realworldhaskell.org}
%
%\end{thebibliography}

\end{document}
